// =========================================
// ai_speech.h
// AI语音处理类头文件
// 功能：定义AI语音处理相关接口
// 作者：你的名字
// 日期：2025-09-17
// =========================================

#ifndef AI_SPEECH_H_
#define AI_SPEECH_H_

#include "snowboy-detect.h"
#include <iostream>
#include <mutex>
#include <string>
#include <vector>
#include <thread>
#include <functional>
#include <atomic>
#include "bsp_alsa.h"
#include <baidu_ai_asr.h>

/**
 * @brief AI语音处理类
 * 用于语音识别、语音合成等AI语音相关功能。
 */
class AiSpeech
{
private:
    // 内部成员变量
    snowboy::SnowboyVad *detector_;            // 静音检测
    snowboy::SnowboyDetect *hotword_detector_; // 热词检测

    // 录制音频
    AlsaRecorder *recorder;
    std::string soundDevice; // 设备文件名
    AlsaDevice *alsaSound;
    std::thread *recordThread{nullptr};
    std::vector<uint8_t> userSpeechData; // 用户声音数据
    std::atomic<bool> recordThreadFlag{false};

    // 新增计时成员变量
    std::chrono::time_point<std::chrono::steady_clock> lastActiveTime;
    static constexpr std::chrono::seconds TIMEOUT_DURATION = std::chrono::seconds(30); // 30秒超时
    uint8_t isFirst{0};                                                                // 是否识别到“你好”

public:
    AiSpeech(const std::string soundDevice = "plughw:1,0");
    ~AiSpeech();

    bool Start();
    void stop();

    void recordAudioThreadFunc();

    void recognizeUserSpeechAudio(const std::vector<uint8_t> &audioData);
    void recognizeUserSpeechAudio(BaiduAiAsr &baidu_asr, const std::vector<uint8_t> &audioData);
};

#endif // AI_SPEECH_H_